package com.example.netease1;


import android.os.Handler;

public class CustomCountDownTimer implements Runnable{

    private int totalTime;
    private int currentTime;
    private ICountDownHandler countDownHandler;
    private Handler handler;
    private boolean isRun;

    //1. 实时回调 这个时候是什么时间 (观察者设计模式)
    //2. 支持动态传入倒计时多少秒
    //3. 每过一秒 总秒数减一
    //4. 总时间倒计时为0时，要回调完成状态

    public CustomCountDownTimer(int totalTime, ICountDownHandler countDownHandler){

        handler = new Handler();

        this.totalTime = totalTime;

        this.currentTime = totalTime;

        this.countDownHandler  = countDownHandler;
    }

    /**
     * 计时线程具体逻辑
     */
    @Override
    public void run() {
        if(isRun){
            if(countDownHandler != null){
                countDownHandler.onTicker(currentTime);
            }
            if(currentTime <= 0) {
                cancel();
                if(countDownHandler != null){
                    countDownHandler.onFinish();
                }
            } else {
                currentTime--;
                handler.postDelayed(this, 1000);
            }
        }
    }


    /**
     * 计时线程 开始
     */
    public void start(){
        this.isRun = true;
        handler.post(this);
    }


    /**
     * 计时线程 终止
     */
    public void cancel(){
        this.isRun  =false;
        handler.removeCallbacks(this);
    }


    /**
     * 观察者回调接口（IOC数据回调）
     * 计时回调接口
     */
    public interface ICountDownHandler{

        /**
         * 倒计时回调
         * @param time 当前计时
         */
        void onTicker(int time);

        /**
         * 完成时回调
         */
        void onFinish();
    }

}
